﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Simulator
{
    /// <summary>
    /// Сущность (в рамках имитации САПР - проект)
    /// </summary>
    [Serializable]
    public class Entity
    {
        private double timeRemained;
        /// <summary>
        /// Оставшееся до конца операции время, сек.
        /// </summary>
        public double TimeRemained 
        {   
            get
            {
                return timeRemained;
            }
            set
            {
                timeRemained = value;
                totalTime += value;
            } 
        }
        /// <summary>
        /// Сложность проекта, в отн. единицах
        /// </summary>
        public double Complexity { get; set; }
        /// <summary>
        /// Качество проекта в отн. единицах
        /// </summary>
        public double Quality { get; set; }
        /// <summary>
        /// Уникальный идентификатор проекта. Он может быть равен только у сущностей, являющихся копиями друг друга,
        /// появившимися после блока "Распараллеливание"
        /// </summary>
        public int Index { get; set; }
        /// <summary>
        /// Блок, в котором находится сущность
        /// </summary>
        public Block OwnerBlock { get; set; }
        /// <summary>
        /// Получить общее время активной обработки сущности
        /// </summary>
        public double TotalTime { get { return totalTime;} }
        private double totalTime = 0;
        /// <summary>
        /// Время создания сущности
        /// </summary>
        public double TimeOfCreation { get; set; }
        /// <summary>
        /// Время выхода сущности из модели
        /// </summary>
        public double TimeOfExpiration{ get; set; }

        public Entity()
        {
            OwnerBlock = null;
        }
        /// <summary>
        /// Скопировать сущность
        /// </summary>
        /// <param name="e">Сущность</param>
        public Entity(Entity e)
        {
            OwnerBlock = null;
            Complexity = e.Complexity;
            Quality = e.Quality;
            Index = e.Index;
        }
    }
}
